package controller;

import helper.AbstractAction;

import java.awt.event.ActionEvent;

import view.BankView;

public class BankViewController {

	private BankView bankView;
	private BankHandler bankHandler;
    private AnlegenKundenDialogController anlegenKundenDialogController;
    private AnlegenKontoDialogController anlegenKontoDialogController;
    private EinAuszahlenDialogController einAuszahlenDialogController;
    private UeberweisungDurchfuehrenDialogController ueberweisungDurchfuehrenDialogController;
    private KontoUebersichtDialogController kontoUebersichtDialogController;
    private KontobewegungenDialogController kontobewegungenDialogController;

	public BankViewController() {
	}

	public void startBankView(BankHandler aBankHandler) {
		bankHandler = aBankHandler;
		bankView = new BankView();
        anlegenKundenDialogController = new AnlegenKundenDialogController(bankHandler, bankView);
        anlegenKontoDialogController = new AnlegenKontoDialogController(bankHandler, bankView);
        einAuszahlenDialogController = new EinAuszahlenDialogController(bankHandler, bankView);
        ueberweisungDurchfuehrenDialogController = new UeberweisungDurchfuehrenDialogController(bankHandler, bankView);
        kontoUebersichtDialogController = new KontoUebersichtDialogController(bankHandler, bankView);
        kontobewegungenDialogController = new KontobewegungenDialogController(bankHandler, bankView);

		bankView.getAnlegenKunde().addActionListener(new AnlegenKundenAction());
		bankView.getDurchfuehrenZahlungen().addActionListener(new EinAuszahlenAction());
		bankView.getAnlegenKonto().addActionListener(new AnlegenKontoAction());
		bankView.getDurchfuehrenUeberweisungen().addActionListener(new UeberweisungAction());
        bankView.getAnzeigenKontostand().addActionListener(new AnzeigenKontostandAction());
        bankView.getAnzeigenKontobewegungen().addActionListener(new AnzeigenKontobewegungenAction());
		bankView.getEnde().addActionListener(new EndeAction());

		bankView.setVisible(true);
	}


	// Inner Classes ***********************************************************

	private class AnlegenKontoAction extends AbstractAction {
		@Override
		protected void execute(ActionEvent aEvent) throws Exception {
            anlegenKontoDialogController.start();
        }
	}

	private class AnlegenKundenAction extends AbstractAction {
		@Override
		protected void execute(ActionEvent aEvent) throws Exception {
            anlegenKundenDialogController.start();
        }
	}

    private class EinAuszahlenAction extends AbstractAction {
		@Override
		protected void execute(ActionEvent aEvent) throws Exception {
            einAuszahlenDialogController.start();
        }
    }

    private class UeberweisungAction extends AbstractAction {
        @Override
        protected void execute(ActionEvent aEvent) throws Exception {
            ueberweisungDurchfuehrenDialogController.start();
        }
    }

    private class AnzeigenKontostandAction extends AbstractAction {
        @Override
        protected void execute(ActionEvent aEvent) throws Exception {
            kontoUebersichtDialogController.start();
        }
    }

    private class AnzeigenKontobewegungenAction extends AbstractAction {
        @Override
        protected void execute(ActionEvent aEvent) throws Exception {
            kontobewegungenDialogController.start();
        }
    }

    private class EndeAction extends AbstractAction {
        @Override
        protected void execute(ActionEvent aEvent) throws Exception {
            bankView.dispose();
        }
    }
}
